package Algorithm.sort;
//Selection类其范型T继承Comparable类中的范型<T>
//这个类又继承了Sort类,是选择排序类
public class Selection<T extends Comparable<T>> extends Sort<T>{
    @Override
    public void sort(T[] nums) {//重写Sort类中的排序方法
        int N=nums.length;//用N记录下数组的长度
        for (int i = 0; i < N-1; i++) {//i:遍历数组并记录已经排序好的最后一个元素位置,直到倒数第二个元素为止,因为最后一个元素小于倒数第二个会直接交换
            int min=i;//min:记录最小元素的位置,每次遍历默认i所在位置元素最小
            for (int j =i+1; j < N; j++) {//j：从i之后的一个位置开始遍历,直到最后一个元素
                if(less(nums[j],nums[min])){//如果位置j的元素小于min记录的最小的元素的大小
                    min=j;//将最小的元素位置记下来,保证min一直是最小的
                }
            }
            swap(nums,i,min);//对数组nums的i号元素和min位置元素做交换,并开始下一次遍历和交换
        }
    }
}
